﻿using System.Collections.Generic;
using ControlAcceso.Dominio;

namespace ControlAcceso.Persistencia
{
    public interface IClienteDao
    {
        ISet<Cliente> getTodosClientesEnSet();

        IList<Cliente> getTodosClientesEnList();

        /// <summary>
        /// Elimina un cliente a partir de su número de documento, si existe. Sino, no hace nada.
        /// </summary>
        /// <param name="documentoAEliminar">Número de documento del cliente que se quiere eliminar</param>
        void eliminarCliente(int documentoAEliminar);


        /// <summary>
        /// Si el cliente pasado por parametro existe lo modifica (reemplaza), sino lo guarda como uno nuevo
        /// </summary>
        /// <param name="unCliente">un cliente a persistir</param>
        /// <returns>retorna el cliente viejo si hay una modificacion, o <value>null</value> si se guardó uno nuevo</returns>
        Cliente guardarOModificarCliente(Cliente unCliente);

        /// <summary>
        /// Devuelve un ISet de clientes que tengan nombre y/o apellido conincidente con el textoABuscar
        /// </summary>
        /// <param name="nombreABuscar","apellidoABuscar">un texto a para filtrar los clientes por nombre y/o apellido</param>
        /// <returns></returns>
        ISet<Cliente> getClientePorNombreOApellido(string nombreABuscar,string apellidoABuscar);

        /// <summary>
        /// Devuelve un cliente que tengan documento conincidente con el documentoABuscar
        /// </summary>
        /// <param name="documentoABuscar">un texto a para un cliente por el documento</param>
        /// <returns>retorna el cliente si existe,sino null</returns>
        Cliente getClientePorDocumento(int documentoABuscar);

    }
}
